package cn.iocoder.yudao.module.signature.service.application;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.signature.controller.admin.application.vo.ApplicationInfoPageReqVO;
import cn.iocoder.yudao.module.signature.controller.admin.application.vo.ApplicationInfoRespVO;
import cn.iocoder.yudao.module.signature.controller.admin.application.vo.ApplicationInfoSaveReqVO;
import cn.iocoder.yudao.module.signature.controller.admin.application.vo.IpaInfoExtractorRespVO;
import cn.iocoder.yudao.module.signature.dal.dataobject.application.ApplicationInfoDO;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.util.List;

/**
 * 应用 Service 接口
 *
 * @author base
 */
public interface ApplicationInfoService {

    /**
     * 创建应用
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createApplicationInfo(@Valid ApplicationInfoSaveReqVO createReqVO);

    /**
     * 更新应用
     *
     * @param updateReqVO 更新信息
     */
    void updateApplicationInfo(@Valid ApplicationInfoSaveReqVO updateReqVO);

    /**
     * 删除应用
     *
     * @param id 编号
     */
    void deleteApplicationInfo(Long id);

    /**
     * 获得应用
     *
     * @param id 编号
     * @return 应用
     */
    ApplicationInfoDO getApplicationInfo(Long id);

    ApplicationInfoDO getApplicationInfo(Long id,Long userId);

    /**
     * 获得应用分页
     *
     * @param pageReqVO 分页查询
     * @return 应用分页
     */
    PageResult<ApplicationInfoDO> getApplicationInfoPage(ApplicationInfoPageReqVO pageReqVO);


    /**
     * 获取应用列表
     * @return
     */
    List<ApplicationInfoRespVO> getInstallAppList();

    /**
     * 获取应用ipa包信息
     */
    IpaInfoExtractorRespVO getIpaInfoExtractor(MultipartFile file);


    /**
     * 逻辑删除数据
     *
     * @param idList 主键结合
     * @return 删除结果
     */
    void delete(List<Long> idList, Long userId) throws Exception;

    /**
     * 启用（单个或者批量）
     *
     * @param idList 主键结合
     * @return 启用结果
     */
    void enable(List<Long> idList);

    /**
     * 禁用（单个或者批量）
     *
     * @param idList 主键结合
     * @return 禁用结果
     */
    void disable(List<Long> idList);


}